/* --------------------------- (C) COPYRIGHT 2020 Fortiortech ShenZhen -----------------------------
    File Name      : AddFunction.h
    Author         : Fortiortech  Appliction Team
    Version        : V1.0
    Date           : 2021-11-07
    Description    : This file contains all the common data types used for Motor Control.
----------------------------------------------------------------------------------------------------
                                       All Rights Reserved
------------------------------------------------------------------------------------------------- */
/* Define to prevent recursive inclusion -------------------------------------*/

#ifndef __AddFunction_H_
#define __AddFunction_H_

/******************************************************************************/
#include <FU68xx_5_Type.h>
/******************************************************************************/

/* Exported types ------------------------------------------------------------*/
typedef struct
{
    uint16 ADCDcbus;                                                            // 母线电压
    uint16 ADCSpeed;                                                            // 模拟速度
    uint16 ADCVref;                                                             // ADC参考
	  uint16 ADCIbus;																															//母线电流
		uint16 ADCCTIbus;																														//母线互感器电流
} ADCSample;

typedef struct
{
    uint32 ONOFF_Times;                                                         // 启停次数
    uint16 ON_Count;                                                            // 运行时间计数
    uint16 OFF_Count;                                                           // 停止时间计数
    uint8  ONOFF_Flag;                                                          // 启停测试中启动标志位
} ONVarible;

typedef struct
{
    uint16 LedCount;                                                            // 闪灯周期计数
    uint16 Counttime;                                                           // 闪灯周期
    uint16 Count;                                                               // 电平翻转计数
    uint8  LedTimCot;                                                           // 闪灯次数计数
}MCLedDisplay;

typedef struct
{
    uint16 mcDcbusFlt;                                                          // 母线电压
    int16  mcDcbusFlt_LSB;                                                      // 当前母线电压滤波后的值
    uint16 CtrlMode;                                                            // 控制模式
    uint16 CurrentPower;                                                        // 当前功率
    int16  Powerlpf;                                                            // 功率滤波后的值
    int16  Powerlpf_LSB;                                                        // 功率滤波后的值
    int16  mcIqref;                                                             // Q轴给定电流
    uint16 mcPosCheckAngle;                                                     // 位置检测的角度
    int32  SQUSysSpeed;                                                         // 速度的平方和
    int16  SpeedFlt;                                                            // 当前速度滤波后的值
    int16  SpeedModeDelay;                                                            // 当前速度滤波后的值   
    int16  SpeedFlt_LSB;                                                        // 当前速度滤波后的值
    int16  SpeedFlag;
    uint16 EsValue;                                                             // 当前FOC_ESQU滤波后的值
    uint16 SQUSpeedDIVEs;                                                       // 速度平方和除以ESQU的值
    uint16 Smo_EK2;                                                             // EK2的调试值
    uint16 EsValue_LSB;                                                         // 当前FOC_ESQU滤波后的值
    uint8  Uqdelaycnt;
    uint8  ESDIVFlag;                                                           // 除法执行标志位
    uint16 SpeedLoopTime;                                                       // 速度环时间
    uint16 RunStateCnt;                                                         // 运行状态计数
    uint16 PowerLoopTime;                                                       // 功率环时间
    uint16 TorqueLoopTime;                                                      // 转矩环时间
    uint16 RunCurrent;                                                          // 运行电流
    uint16 ChargeStep;                                                          // 预充电的步骤
    uint16 State_Count;                                                         // 电机各个状态的时间计数
    uint16 RPD_Count;                                                         // 电机各个状态的时间计数
    uint16 FGDelayOutputTimer;  

    int16  Power_Currt;
	int16  mcIbusFlt;
		
	int16 mcCTIbusFlt;//电流互感器采集电流
	uint32 mcCTIbusSum;
		
	uint16 MosTempDecFlt;           // Mos温度
		
}FOCCTRL;

typedef struct
{
    uint32 SleepDelayCout;
    int32  SleepFlag;
    uint8  SleepEn;
}SLEEPMODE;

typedef struct
{
    uint16 Read;
    uint16 Sum;
    uint16 RealValue;
}VspInput;

typedef struct
{
    int16  TargetValue;
    int16  ActualValue;
    int16  IncValue;
    int16  DecValue;
    int16  DelayCount;
    int16  DelayPeriod;
    int8   FlagONOFF;
	
	  int16  SMOSpeedMin;
}MCRAMP;


typedef struct
{
    uint16 PwmCompare;               // 比较值
    uint16 PwmCompareUpdate;
    uint16 PwmArr;                   // 周期值
    uint16 PwmCompareOld;            // 上一次的比较值
    uint16 PwmArrOld;                // 上一次的周期值
    uint8  PwmFlag;                  // PWM标志位，置1期间不更新duty
    uint16 PwmArrUpdate;             // 计算中的周期值
    uint16 PwmDuty;                  // PWM占空比，Q15格式
    uint16 PwmSclk;                  // PWM频率
    int16  PwmUpdateFlag;            // PWM新的duty更新
    uint32 PwmVSum;                  // PWM的总和
    uint16 PwmCnt;                   // PWM求平均技术
    uint8  PwmDivFlag;               // PWM的除法标志位
    uint8  PwmDealFlag;
}PWMINPUTCAL;

typedef struct
{
    uint8 FR;                        // 当前给定的转子方向
    uint8 FlagFR;                    // 反向的标志位
    uint8 FRStatus;
    uint8 TargetFR;                  // 设置的目标方向
    uint16 OldTargetSpeed;
} MotorFRTypeDef;

typedef struct
{
  uint16 PowerOnCnt;                // 上电时间计数
}TIMERTypeDef;


/* Exported variables ---------------------------------------------------------------------------*/
extern PWMINPUTCAL    xdata mcPwmInput;
extern ONVarible     xdata  ONOFFTest;
extern ADCSample      xdata AdcSampleValue;
extern FOCCTRL        xdata mcFocCtrl;
extern MCRAMP         xdata MotorControl;
extern int16          xdata VSP;
extern MotorFRTypeDef xdata mcFRState;
extern SLEEPMODE    xdata  SleepSet;
extern uint16  xdata FGDelayOutputTimer;
extern TIMERTypeDef   xdata Time;

extern int16 PFC_IKP_RUN_Temp;
extern int16 PFC_IKI_RUN_Temp;

/* Exported functions ---------------------------------------------------------------------------*/

extern void   VariablesPreInit(void);

extern void   TargetSpeed_Colletion(void);
extern void   Speed_response(void);
extern void   Motor_Ramp(void);
//extern void   FGOutput(void);
extern void   VSPSample(void);
extern void   ONOFF_Starttest(void);
extern void   StarRampDealwith(void);

extern void   APP_DIV(void);
extern void   PWMInputCapture(void);
extern void   FGOutput(void);

extern uint32 Abs_F32(int32 value);
/******* SMDU控制**************/
extern int16  HW_One_PI(int16 Xn1);
extern int16 LPFFunction(int16 Xn1, int16 Xn0, int8 K);
extern int16  Atan_Us_MDU(int16 Xn1, int16 Xn0);
extern int16 DivQ_L_MDU(uint16 Xn1, uint16 Xn0,uint16 Yn);
/******* **********************/

/******* Sleep控制**************/
extern void Sleepmode_Init(void);
extern void Sleepmode(void);

/******* **********************/
#endif